import 'dart:collection';
import 'dart:convert';
import 'dart:ui';

import 'package:basics/basics.dart';
import 'package:dart_date/dart_date.dart';
import 'package:day_demo/day_item.dart';
import 'package:day_demo/hero_wx_page.dart';
import 'package:day_demo/src/base62/base62_helper.dart';
import 'package:day_demo/src/basic.dart';
import 'package:day_demo/src/beauty_json.dart';
import 'package:day_demo/src/design_patterns/builder_pattern.dart';
import 'package:day_demo/src/design_patterns/visitor_pattern.dart';
import 'package:day_demo/src/easy_debounce.dart';
import 'package:day_demo/src/expand_animation.dart';
import 'package:day_demo/src/fake_wx_drag_dismiss/animation_controllers/default_duration.dart';
import 'package:day_demo/src/fake_wx_drag_dismiss/public/drag_default_transitions_builder.dart';
import 'package:day_demo/src/fake_wx_drag_dismiss/public/drag_transition_page.dart';
import 'package:day_demo/src/flutter_expandable_text/flutter_expandable_text.dart';
import 'package:day_demo/src/getx_bind_params/demo.dart';
import 'package:day_demo/src/getx_bind_params/getx_bind_params.dart';
import 'package:day_demo/src/hero_page.dart';
import 'package:day_demo/src/hero_page_route.dart';
import 'package:day_demo/src/image_format_helper.dart';
import 'package:day_demo/src/image_viewer.dart';
import 'package:day_demo/src/isolate_channel/isolate_channel_mixin.dart';
import 'package:day_demo/src/ka_ka.dart';
import 'package:day_demo/src/keyboard_sensitive_view/keyboard_sensitive_view.dart';
import 'package:day_demo/src/logger_helper.dart';
import 'package:day_demo/src/nb_dialog.dart';
import 'package:day_demo/src/nested_scroll_page/nested_scroll_page.dart';
import 'package:day_demo/src/object.dart';
import 'package:day_demo/src/on_substring.dart';
import 'package:day_demo/src/open_container.dart';
import 'package:day_demo/src/scrollable_visible.dart';
import 'package:day_demo/src/scrollview_content_size.dart';
import 'package:day_demo/src/tabbarview/demo_tabbarview.dart';
import 'package:dismissible_page/dismissible_page.dart';
import 'package:dot_cast/dot_cast.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:flutter_isolate/flutter_isolate.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:rxdart/rxdart.dart';
import 'package:top_snackbar_flutter/custom_snack_bar.dart';
import 'package:top_snackbar_flutter/top_snack_bar.dart';
import 'package:yaml/yaml.dart';
import "package:flutter/services.dart" as s;
import 'package:image/image.dart' as img;

import 'src/square/square_heading/kyy_org_square_heading_page.dart';

abstract class I {
  void a() {
    throw UnimplementedError();
  }
}

class B implements I {
  @override
  void a() {
    // TODO: implement a
  }
}

class SchemeParseHandler {
  SchemeParseHandler._();
  static Uri parseNewUri(Uri uri) {
    const keywords = 'app';
    var queryParameters = uri.queryParameters;
    if (!queryParameters.keys.contains(keywords)) {
      return uri;
    }
    queryParameters = Map.from(queryParameters);
    var app = queryParameters[keywords] ?? '';
    app = Uri.decodeQueryComponent(app);
    queryParameters.remove(keywords);
    var queryParameters0 = <String>[];
    queryParameters.forEach((key, value) {
      queryParameters0.add('$key=$value');
    });
    var query = app;
    if (queryParameters0.isNotEmpty) {
      query = '$app&${queryParameters0.join('&')}';
    }
    return Uri(
      scheme: uri.scheme,
      host: uri.host,
      path: uri.path,
      port: uri.port,
      query: query,
      fragment: uri.fragment.isEmpty ? null : uri.fragment,
    );
  }
}

int daysBetween(DateTime from, DateTime to) {
  from = DateTime(from.year, from.month, from.day);
  to = DateTime(to.year, to.month, to.day);
  return (to.difference(from).inHours / 24).round();
}

int daysDiff(DateTime from, DateTime to) {
  from = DateTime.utc(from.year, from.month, from.day).toLocal();
  to = DateTime.utc(to.year, to.month, to.day).toLocal();
  return to.difference(from).inDays;
}

extension DateTimeExtension on DateTime {
  int calendarDaysTo(DateTime from) {
    var now = DateTime.utc(year, month, day);
    var date = DateTime.utc(from.year, from.month, from.day);
    var days = date.difference(now).inDays;
    if (days < 0) {
      return -days;
    }
    return days;
  }
}

GlobalKey<NavigatorState> navigatorKey =
    const GlobalObjectKey('_GlobalNavigatorStateKey');
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  DartPluginRegistrant.ensureInitialized();
  await ScreenUtil.ensureScreenSize();
  runApp(const MyApp());

  Base62Helper.decimalToBase62(89544443).print();
  DateTime from = DateTime.now();
  DateTime to = DateTime.parse('2024-04-25');
  var d = from.calendarDaysTill(to.year, to.month, to.day);
  var days = to.difference(from).inDays; //daysBetween2(from, to);
  LogHelper.d(days);
  var now = DateTime.now().toUtc();
  bool isUtc = now.isUtc;
  LogHelper.d(isUtc);

  var s = "abc😀";
  LogHelper.d(s.subOnCharacters(0));
  Rx.concat<int>([
    Stream.fromFuture(doneTask()),
    Stream.fromFuture(waitTask()),
  ]).distinct().listen((event) {
    LogHelper.d(event);
  });
  List actions = ['https', 'ftp'];
  String text = 'abcqweeacdfhttps2edfg2ftpewew1';
  final pattern = actions.map((e) => RegExp.escape(e)).join('|');
  final regExp = RegExp(pattern, multiLine: true);
  final textView = text.splitMapJoin(regExp,
      onMatch: (m) => '_&t${m[0]}_&t',
      onNonMatch: (n) {
        return n;
      });
  var texts = textView.split(RegExp('_&t|_&t'));
  String uid = 'c4VTSVn3JfUxx9durORzj33UHfA2';
  var i = 0;
  final dashes = {2, 3, 4, 5};

  final replaced = uid.splitMapJoin(RegExp('....'),
      onNonMatch: (s) => dashes.contains(i++) ? '-' : '');

  print(replaced);

  RegExp _urlReg = RegExp(
    r'https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=#]*)?',
  );

  _urlReg =
      RegExp(r'https?://(\w*:\w*@)?[-\w.]+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?');
  var url = 'https://www.baidu.com/s/d?v=1&a=2';

  var _url = url.splitMapJoin(_urlReg, onMatch: (m) {
    return '${m[0]}';
  }, onNonMatch: (n) {
    return n;
  });
  // LogHelper.d(SchemeParseHandler.parseNewUri(Uri.parse(
  //     'https://dev.ringkol.com/mobile/downloadCenter/?app=from=post_share%26post_share_token=CKUOEhIwM29xbzAwMDE5d3gwejJicXcaCwjZ8LuvBhCov9M3%26scene=2&channel=LKguangchang&type=open')));
  // await getAppVersion();
  LogHelper.d(Uri.parse(
          'https://dev.ringkol.com/mobile/downloadCenter/?app=from=post_share%26post_share_token=CKUOEhIwM29xbzAwMDE5d3gwejJicXcaCwjZ8LuvBhCov9M3%26scene=2&channel=LKguangchang&type=open')
      .pathSegments);
  LogHelper.d(getD(17.45));
  var imagesMap = <int, List<int>>{};
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  imagesMap[1] = numbers;
  imagesMap[0] = [11, 23];
  imagesMap[2] = [33, 44];
  imagesMap = SplayTreeMap.from(imagesMap);
  var list = imagesMap.values.expand((element) => element).toList();
  LogHelper.d(list);
}

/// 字体大小处理
double getD(double t) {
  if (t < 0.5) {
    return 1.0;
  }
  if (t <= 1.0) {
    return t;
  }
  var t0 = t - t.toInt();
  if (t0 >= 0.5) {
    return t;
  }
  if (t0 < 0.5) {
    t0 = 0.5;
  }
  return t0 + t.toInt();
}

class Service with IsolateChannelMixin {
  Service() {
    WidgetsFlutterBinding.ensureInitialized();
    DartPluginRegistrant.ensureInitialized();
  }
  Future performExpensiveWork() async {
    final s.ByteData imageData = await s.rootBundle.load('assets/234.jpg');
    final imageInt8List = imageData.buffer.asUint8List();
    // return _expensiveWork(imageInt8List);
    return flutterCompute(_expensiveWork, imageInt8List);
    // return run((p) => _expensiveWork(p), imageInt8List);
  }

  @pragma('vm:entry-point')
  static Future _expensiveWork(Uint8List image) async {
    // for (int i = 0; i < 1000000; i++) {}
    return FlutterImageCompress.compressWithList(image, quality: 50);
  }
}

void loadDemoYaml() async {
  final data = await s.rootBundle.loadString('pubspec.yaml');
  final mapData = loadYaml(data);
  LogHelper.d(mapData);
}

Future<int> waitTask() async {
  await Future.delayed(const Duration(seconds: 2));
  return 10;
}

Future<int> doneTask() async {
  await Future.delayed(const Duration(seconds: 5));
  return 2;
}

Future<void> getAppVersion() async {
  final yamlString = await s.rootBundle.loadString('pubspec.yaml');
  final parsedYaml = loadYaml(yamlString);
  LogHelper.d(parsedYaml['version']);
  LogHelper.d(parsedYaml['name']);
}

bool changeRootWidget = true;

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    ScreenUtil.init(context);
    return MaterialApp(
      title: 'Flutter Demo',
      navigatorKey: navigatorKey,
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.white),
        useMaterial3: false,
        cardColor: Colors.white,
        appBarTheme: const AppBarTheme(
          backgroundColor: Colors.white,
          foregroundColor: Colors.black,
        ),
      ),
      // home: const MyHomePage(title: 'Day Demo'),
      home: changeRootWidget
          ? const MyHomePage(title: 'Day Demo')
          : const KeyboardAttachablePage(),
      builder: (context, child) {
        return Overlay(
          initialEntries: [
            OverlayEntry(
              builder: (context) => Banner(
                message: 'dev',
                location: BannerLocation.topStart,
                child: child ?? Container(),
              ),
            ),
          ],
        );
      },
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  late AsyncValueSetter<DayItemTwo> asyncValueSetter;
  List<String> images = [
    '123.jpg',
    '234.jpg',
    '678.gif',
    '3738.tif',
    '3739.tiff',
    'album_buy_bg.svg',
    'dash_flutter.png',
    'icon.png',
    'IMG_0002.HEIC',
    'IMG_3738.bmp',
    'IMG_3738.webp',
    'IMG_3738.tiff',
    'test.pdf',
  ];
  List<Widget> imgNames = [];

  @override
  void reassemble() {
    configImages();
    super.reassemble();
  }

  List<Uri> list = [
    Uri.parse(
        'https://operation-manage-square.ringkol.com/square/post-detail?post_share_token=CNIWEhIweXJrMDAwMDE1eWNpZjhnOTQaDAjlwqSsBhC13qK6Ag'),
    Uri.parse(
        'htpps://operation-manage-square.ringkol.com/square/post-detail?post_share_token=CNIWEhIweXJrMDAwMDE1eWNpZjhnOTQaDAjlwqSsBhC13qK6Ag'),
  ];
  void configImages() {
    imgNames.clear();
    final widgets = images
        .map((e) => Material(
              elevation: 8,
              child: InkWell(
                onTap: () async {
                  // Uri uri = Uri.parse(
                  //     'ringkol://operation-manage-square.ringkol.com/square/post-detail?post_share_token=CNIWEhIweXJrMDAwMDE1eWNpZjhnOTQaDAjlwqSsBhC13qK6Ag');
                  //
                  // LogHelper.d(uri.isScheme('ringkol'));
                  // LogHelper.d(uri.host.endsWith('ringkol.com'));
                  List<Uri> uniqueList =
                      list.fold([], (previousValue, element) {
                    if (!previousValue.contains(element)) {
                      previousValue.add(element);
                    }
                    return previousValue;
                  });

                  LogHelper.d(uniqueList);
                  final s.ByteData imageData =
                      await s.rootBundle.load('assets/$e');
                  final imageInt8List = imageData.buffer.asUint8List();
                  final imageFormat =
                      ImageFormatHelper.imageFormatForImageUnit8List(
                          imageInt8List);
                  BuildContext context = navigatorKey.currentContext!;
                  if (context.mounted) {
                    showTopSnackBar(
                      Overlay.of(context),
                      CustomSnackBar.success(
                        message:
                            "图片真格式： ${imageFormat.name} \n Magic Numbers: ${imageFormat.sign.toString()}",
                      ),
                    );
                  }
                },
                child: Container(
                  decoration: BoxDecoration(
                    color: Colors.deepOrange,
                    borderRadius: BorderRadius.circular(4),
                  ),
                  padding:
                      const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
                  child: Text(
                    e,
                    style: const TextStyle(
                      fontSize: 20,
                      color: Colors.white,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
            ))
        .toList();
    imgNames.addAll(widgets);
  }

  @override
  void initState() {
    asyncValueSetter = (value) {
      // LogHelper.d(value.data, title: '变化');
      LogHelper.d(value.workType!.alias, title: 'work');
      return Future(() => null);
    };
    configImages();
    super.initState();
  }

  dynamic o;
  Uint8List? imgUint8List;
  void _incrementCounter() async {
    Navigator.push(context, MaterialPageRoute(builder: (ctx) {
      return const KyyOrgSquareHeadingPage();
    }));
    final s.ByteData imageData = await s.rootBundle.load('assets/IMG_3738.bmp');
    final imageInt8List = imageData.buffer.asUint8List();
    EasyDebounce.debounce('tag', () {
      print(ImageFormatHelper.imageFormatForImageUnit8List(imageInt8List));
    });
    return;
    print(imageInt8List.sublist(0, 8));
    print(String.fromCharCodes(imageInt8List.sublist(4, 12)));
    print(utf8.decode(imageInt8List.sublist(4, 12)));
    final compressImageUint8List =
        await FlutterImageCompress.compressWithList(imageInt8List);
    final bytes = img.encodeJpg(img.decodeImage(compressImageUint8List)!);
    print(bytes);
    print('0x' + 255.toRadixString(16).toUpperCase());
    return;
    var items = <DayItem>[];
    final item = DayItemTwo(data: '11', workType: WorkType.bricklayer);
    items.add(item);
    items.add(DayItemOne());
    if (items[0].isType<DayItemTwo>()) {
      LogHelper.d(items.first.cast<DayItemTwo>());
    } else {
      LogHelper.d("items.first.cast<DayItemTwo>()");
    }
    configure(items[0] as DayItemTwo);
    var data = (items[0] as DayItemTwo).data;
    LogHelper.d(data);
    setState(() {
      _counter++;
    });

    o = 1;
    LogHelper.d(o == '', title: '比较');
    WorkType.byIndex(1).d(title: 'WorkType');
    ShareConfig.init(useFluwxForAndroid: !ShareConfig.useFluwx);
    LogHelper.d(ShareConfig.useFluwx);
  }

  configure(DayItemTwo item) {
    var elem = item;
    elem.data = '$_counter';
    asyncValueSetter.call(elem);
  }

  bool expanded = true;
  IconData _icon = Icons.delete;

  OverlayPortalController portalController = OverlayPortalController();
  @override
  Widget build(BuildContext context) {
    // return DemoPage(params: DemoPageParams('cheng bin'));
    // return VisitorPatternPage();
    // return const VisiblePage();
    return KeyboardSensitiveView();
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            ExpandableText(
              '#张远2.5巡\n是谁听到了婚庆哥手的现场版嘉宾？\n还是粤语版！\n是我！',
              onOverflowChanged: (value) {
                LogHelper.d(value);
              },
            ),
            AnimatedSwitcher(
              transitionBuilder: (child, anim) {
                return ScaleTransition(
                  scale: anim,
                  child: child,
                );
              },
              duration: const Duration(milliseconds: 350),
              child: IconButton(
                  key: ValueKey(_icon),
                  icon: Icon(_icon),
                  onPressed: () {
                    setState(() {
                      if (_icon == Icons.edgesensor_low) {
                        _icon = Icons.edgesensor_low;
                      } else {
                        _icon = Icons.edgesensor_low;
                      }
                    });
                  }),
            ),
            // Wrap(
            //   spacing: 12,
            //   runSpacing: 12,
            //   children: [
            //     ...imgNames,
            //   ],
            // ),
            GestureDetector(
              onTap: () {
                NBDialog.show(context);
                setState(() {
                  expanded = !expanded;
                });
              },
              child: Column(
                mainAxisAlignment: MainAxisAlignment.end,
                children: [
                  ExpandedSection(
                    expand: expanded,
                    child: Stack(
                      children: [
                        Container(
                          width: double.infinity,
                          height: 40,
                          color: Colors.lime,
                        ),
                      ],
                    ),
                  ),
                  SizedBox(
                    height: 40,
                    width: double.infinity,
                    child: Container(
                      color: Colors.blueAccent,
                    ),
                  ),
                ],
              ),
            ),
            const SizedBox(
              height: 40,
            ),
            Flexible(child: BuilderPatterns()),
            ElevatedButton(
                onPressed: () {
                  portalController.show();
                },
                child: OverlayPortal(
                    controller: portalController,
                    child: Text('data'),
                    overlayChildBuilder: (ctx) {
                      return Positioned(
                        child: Text(
                          '1223233',
                          style: TextStyle(
                            color: Colors.red,
                          ),
                        ),
                        top: 300,
                        left: 10,
                      );
                    })),
            // GestureDetector(
            //   onTap: () {
            //     Navigator.push(
            //       context,
            //       PageRouteBuilder(
            //         fullscreenDialog: true,
            //         pageBuilder: (ctx, begin, end) {
            //           return FadeTransition(
            //             opacity: begin,
            //             child: PreviewPage(
            //               imageUrlList: [
            //                 ImageEntity(
            //                   'https://source.unsplash.com/1900x3600/?camera,paper',
            //                   0,
            //                 )
            //               ],
            //             ),
            //           );
            //         },
            //       ),
            //     );
            //   },
            //   child: Hero(
            //     tag: 0,
            //     child: Container(
            //       height: 100,
            //       width: 100,
            //       clipBehavior: Clip.antiAlias,
            //       decoration: const BoxDecoration(
            //         color: Colors.transparent,
            //         borderRadius: BorderRadius.only(
            //           topLeft: Radius.circular(16),
            //           topRight: Radius.circular(16),
            //         ),
            //       ),
            //       child: Image.network(
            //         'https://source.unsplash.com/1900x3600/?camera,paper',
            //         width: 100,
            //         height: 100,
            //         fit: BoxFit.fill,
            //       ),
            //     ),
            //   ),
            // ),
            // _OpenContainerWrapper(
            //   closedBuilder: (BuildContext context, void Function() action) {
            //     return Container(
            //       height: 100,
            //       width: 100,
            //       clipBehavior: Clip.antiAlias,
            //       decoration: const BoxDecoration(
            //         color: Colors.transparent,
            //         borderRadius: BorderRadius.only(
            //           topLeft: Radius.circular(16),
            //           topRight: Radius.circular(16),
            //         ),
            //       ),
            //       child: Image.network(
            //         'https://source.unsplash.com/1900x3600/?camera,paper',
            //         width: 100,
            //         height: 100,
            //         fit: BoxFit.fill,
            //       ),
            //     );
            //   },
            //   transitionType: ContainerTransitionType.fade,
            //   onClosed: (bool? data) {},
            // ),
            GestureDetector(
              onTap: () {
                // context.pushTransparentRoute(DismissiblePage(
                //   backgroundColor: Colors.black,
                //   onDismissed: () {
                //     Navigator.of(context).pop();
                //   },
                //   direction: DismissiblePageDismissDirection.multi,
                //   isFullScreen: true,
                //   child: const HeroWxPage(
                //     tag: 'HeroWxPage',
                //   ),
                // ));
                // return;
                Navigator.push(
                  context,
                  PageRouteBuilder(
                    fullscreenDialog: true,
                    opaque: false,
                    pageBuilder: (ctx, begin, end) {
                      const HeroWxPage = '1';
                      return DragTransitionPage(
                        builder: (BuildContext context) =>
                            const HeroStateWidget(
                          tag: HeroWxPage,
                        ),
                        dragDismissWithNoScaleAnimationAtTopEdge: true,
                      );
                    },
                    transitionsBuilder: (ctx, _, __, child) {
                      return defaultTransitionsBuilder(context, child);
                    },
                    transitionDuration: defaultDuration,
                    reverseTransitionDuration: defaultDuration,
                  ),
                );
              },
              child: Hero(
                tag: '1',
                child: Image.network(
                  'https://source.unsplash.com/1900x3600/?camera,paper',
                  width: 100,
                  height: 100,
                  fit: BoxFit.fill,
                ),
              ),
            ),
            // const JankWidget(),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

class _OpenContainerWrapper extends StatelessWidget {
  const _OpenContainerWrapper({
    required this.closedBuilder,
    required this.transitionType,
    required this.onClosed,
  });

  final CloseContainerBuilder closedBuilder;
  final ContainerTransitionType transitionType;
  final ClosedCallback<bool?> onClosed;

  @override
  Widget build(BuildContext context) {
    return OpenContainer<bool>(
      transitionType: transitionType,
      openBuilder: (BuildContext context, VoidCallback _) {
        return DragTransitionPage(builder: (_) => const _DetailsPage());
      },
      onClosed: onClosed,
      tappable: true,
      closedBuilder: closedBuilder,
      closedColor: Colors.transparent,
      openColor: Colors.black.withOpacity(0.1),
    );
  }
}

class _DetailsPage extends StatelessWidget {
  const _DetailsPage();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Details page'),
      ),
      body: ListView(
        children: <Widget>[
          Container(
            color: Colors.black38,
            height: 250,
            child: Image.network(
              'https://source.unsplash.com/1900x3600/?camera,paper',
              fit: BoxFit.fill,
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(20.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Text(
                  'Title',
                  style: Theme.of(context).textTheme.headlineSmall!.copyWith(
                        color: Colors.black54,
                        fontSize: 30.0,
                      ),
                ),
                const SizedBox(height: 10),
                Text(
                  _loremIpsumParagraph,
                  style: Theme.of(context).textTheme.bodyMedium!.copyWith(
                        color: Colors.black54,
                        height: 1.5,
                        fontSize: 16.0,
                      ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

const String _loremIpsumParagraph =
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod '
    'tempor incididunt ut labore et dolore magna aliqua. Vulputate dignissim '
    'suspendisse in est. Ut ornare lectus sit amet. Eget nunc lobortis mattis '
    'aliquam faucibus purus in. Hendrerit gravida rutrum quisque non tellus '
    'orci ac auctor. Mattis aliquam faucibus purus in massa. Tellus rutrum '
    'tellus pellentesque eu tincidunt tortor. Nunc eget lorem dolor sed. Nulla '
    'at volutpat diam ut venenatis tellus in metus. Tellus cras adipiscing enim '
    'eu turpis. Pretium fusce id velit ut tortor. Adipiscing enim eu turpis '
    'egestas pretium. Quis varius quam quisque id. Blandit aliquam etiam erat '
    'velit scelerisque. In nisl nisi scelerisque eu. Semper risus in hendrerit '
    'gravida rutrum quisque. Suspendisse in est ante in nibh mauris cursus '
    'mattis molestie. Adipiscing elit duis tristique sollicitudin nibh sit '
    'amet commodo nulla. Pretium viverra suspendisse potenti nullam ac tortor '
    'vitae.\n'
    '\n'
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod '
    'tempor incididunt ut labore et dolore magna aliqua. Vulputate dignissim '
    'suspendisse in est. Ut ornare lectus sit amet. Eget nunc lobortis mattis '
    'aliquam faucibus purus in. Hendrerit gravida rutrum quisque non tellus '
    'orci ac auctor. Mattis aliquam faucibus purus in massa. Tellus rutrum '
    'tellus pellentesque eu tincidunt tortor. Nunc eget lorem dolor sed. Nulla '
    'at volutpat diam ut venenatis tellus in metus. Tellus cras adipiscing enim '
    'eu turpis. Pretium fusce id velit ut tortor. Adipiscing enim eu turpis '
    'egestas pretium. Quis varius quam quisque id. Blandit aliquam etiam erat '
    'velit scelerisque. In nisl nisi scelerisque eu. Semper risus in hendrerit '
    'gravida rutrum quisque. Suspendisse in est ante in nibh mauris cursus '
    'mattis molestie. Adipiscing elit duis tristique sollicitudin nibh sit '
    'amet commodo nulla. Pretium viverra suspendisse potenti nullam ac tortor '
    'vitae';
